/**
 * Tabs API 服务层
 * 封装所有与 Tab 相关的 API 调用
 */
import { apiClient, ApiResponse } from './client';
import {
  TabDto,
  TabsByCollectionDto,
  CreateTabRequest,
  UpdateTabRequest,
  ReorderTabsRequest,
  CaptureTabsRequest,
  CaptureTabsResponse,
  ListTabsByCollectionsRequest,
  DeleteResponse,
} from './types';

/**
 * 创建标签页
 * POST /tabs
 */
export async function createTab(data: CreateTabRequest): Promise<TabDto> {
  const response = await apiClient.post<ApiResponse<TabDto>>('/tabs', data);
  if (!response.data.data) {
    throw new Error('创建标签页失败');
  }
  return response.data.data;
}

/**
 * 获取集合下的标签页列表
 * GET /collections/{collection_id}/tabs
 */
export async function getTabsByCollection(collectionId: number): Promise<TabDto[]> {
  const response = await apiClient.get<ApiResponse<TabDto[]>>(
    `/collections/${collectionId}/tabs`
  );
  return response.data.data || [];
}

/**
 * 批量查询多个集合的标签页
 * POST /tabs/query
 */
export async function getTabsByCollections(
  data: ListTabsByCollectionsRequest
): Promise<TabsByCollectionDto[]> {
  const response = await apiClient.post<ApiResponse<TabsByCollectionDto[]>>(
    '/tabs/query',
    data
  );
  return response.data.data || [];
}

/**
 * 获取单个标签页详情
 * GET /tabs/{id}
 */
export async function getTab(tabId: number): Promise<TabDto> {
  const response = await apiClient.get<ApiResponse<TabDto>>(`/tabs/${tabId}`);
  if (!response.data.data) {
    throw new Error('标签页不存在');
  }
  return response.data.data;
}

/**
 * 更新标签页
 * PATCH /tabs/{id}
 */
export async function updateTab(tabId: number, data: UpdateTabRequest): Promise<TabDto> {
  const response = await apiClient.patch<ApiResponse<TabDto>>(`/tabs/${tabId}`, data);
  if (!response.data.data) {
    throw new Error('更新标签页失败');
  }
  return response.data.data;
}

/**
 * 删除标签页（软删除）
 * DELETE /tabs/{id}
 */
export async function deleteTab(tabId: number): Promise<void> {
  await apiClient.delete<ApiResponse<DeleteResponse>>(`/tabs/${tabId}`);
}

/**
 * 批量采集浏览器窗口标签
 * 创建一个新的集合并将浏览器窗口内的所有标签批量写入该集合
 * POST /tabs/capture
 */
export async function captureTabs(data: CaptureTabsRequest): Promise<CaptureTabsResponse> {
  const response = await apiClient.post<ApiResponse<CaptureTabsResponse>>(
    '/tabs/capture',
    data
  );
  if (!response.data.data) {
    throw new Error('批量采集标签页失败');
  }
  return response.data.data;
}

/**
 * 批量重排或移动标签页
 * 批量更新多个集合下标签页的排序位置与归属
 * PATCH /tabs/reorder
 */
export async function reorderTabs(data: ReorderTabsRequest): Promise<TabDto[]> {
  const response = await apiClient.patch<ApiResponse<TabDto[]>>('/tabs/reorder', data);
  return response.data.data || [];
}
